﻿using System;
using System.Collections.Generic;

namespace WUDI.ECharts.Grid.Tooltip.AxisPointer
{
	/// <summary>
	/// Object
	/// </summary>
	public class AxisPointer
	{

		/// <summary>
		/// string
		/// 指示器类型。
		/// 可选
		/// 'line' 直线指示器
		/// 'shadow' 阴影指示器
		/// 'none' 无指示器
		/// 'cross' 十字准星指示器。其实是种简写，表示启用两个正交的轴的 axisPointer。
		/// </summary>
		public AxisPointerType type { get; set; } = AxisPointerType.line;

		/// <summary>
		/// string
		/// 指示器的坐标轴。
		/// 默认情况，坐标系会自动选择显示哪个轴的 axisPointer（默认取类目轴或者时间轴）。
		/// 可以是 'x', 'y', 'radius', 'angle'。
		/// </summary>
		public String axis { get; set; } = "auto";

		/// <summary>
		/// boolean
		/// 坐标轴指示器是否自动吸附到点上。默认自动判断。
		/// 这个功能在数值轴和时间轴上比较有意义，可以自动寻找细小的数值点。
		/// </summary>
		public bool? snap { get; set; }

		/// <summary>
		/// number
		/// 坐标轴指示器的 z 值。控制图形的前后顺序。z值小的图形会被z值大的图形覆盖。
		/// </summary>
		public int? z { get; set; }

		/// <summary>
		/// Object
		/// 坐标轴指示器的文本标签。
		/// </summary>
		public WUDI.ECharts.Grid.Tooltip.AxisPointer.Label label { get; set; }

		/// <summary>
		/// Object
		/// axisPointer.type 为 'line' 时有效。
		/// </summary>
		public WUDI.ECharts.Grid.Tooltip.AxisPointer.LineStyle lineStyle { get; set; }

		/// <summary>
		/// Object
		/// axisPointer.type 为 'shadow' 时有效。
		/// </summary>
		public WUDI.ECharts.Grid.Tooltip.AxisPointer.ShadowStyle shadowStyle { get; set; }

		/// <summary>
		/// Object
		/// axisPointer.type 为 'cross' 时有效。
		/// </summary>
		public WUDI.ECharts.Grid.Tooltip.AxisPointer.CrossStyle crossStyle { get; set; }

		/// <summary>
		/// boolean
		/// 是否开启动画。
		/// </summary>
		public Boolean animation { get; set; } = true;

		/// <summary>
		/// number
		/// 是否开启动画的阈值，当单个系列显示的图形数量大于这个阈值时会关闭动画。
		/// </summary>
		public int animationThreshold { get; set; } = 2000;

		/// <summary>
		/// number
		/// 初始动画的时长，支持回调函数，可以通过每个数据返回不同的 delay 时间实现更戏剧的初始动画效果：
		/// animationDuration: function (idx) {
		///     // 越往后的数据延迟越大
		///     return idx * 100;
		/// }
		/// </summary>
		public int animationDuration { get; set; } = 1000;

		/// <summary>
		/// string
		/// 初始动画的缓动效果。不同的缓动效果可以参考 缓动示例。
		/// </summary>
		public String animationEasing { get; set; } = "cubicOut";

		/// <summary>
		/// number,Function
		/// 初始动画的延迟，支持回调函数，可以通过每个数据返回不同的 delay 时间实现更戏剧的初始动画效果。
		/// 如下示例：
		/// animationDelay: function (idx) {
		///     // 越往后的数据延迟越大
		///     return idx * 100;
		/// }
		/// 也可以看该示例
		/// </summary>
		public dynamic animationDelay { get; set; } = 0;

		/// <summary>
		/// number,Function
		/// 数据更新动画的时长。
		/// 支持回调函数，可以通过每个数据返回不同的 delay 时间实现更戏剧的更新动画效果：
		/// animationDurationUpdate: function (idx) {
		///     // 越往后的数据延迟越大
		///     return idx * 100;
		/// }
		/// </summary>
		public dynamic animationDurationUpdate { get; set; } = 200;

		/// <summary>
		/// string
		/// 数据更新动画的缓动效果。
		/// </summary>
		public String animationEasingUpdate { get; set; } = "exponentialOut";

		/// <summary>
		/// number,Function
		/// 数据更新动画的延迟，支持回调函数，可以通过每个数据返回不同的 delay 时间实现更戏剧的更新动画效果。
		/// 如下示例：
		/// animationDelayUpdate: function (idx) {
		///     // 越往后的数据延迟越大
		///     return idx * 100;
		/// }
		/// 也可以看该示例
		/// </summary>
		public dynamic animationDelayUpdate { get; set; } = 0;

	}
}
